// 程序四：系统信息打印
const os = require('os');

console.log('=== 系统信息 ===');

// 1. CPU 架构信息
console.log('\n--- CPU 架构信息 ---');
console.log('CPU 架构:', os.arch());
console.log('CPU 核心数:', os.cpus().length);
console.log('CPU 型号:', os.cpus()[0].model);
console.log('CPU 速度:', os.cpus()[0].speed, 'MHz');

// 2. 操作系统信息
console.log('\n--- 操作系统信息 ---');
console.log('操作系统类型:', os.type());
console.log('操作系统平台:', os.platform());
console.log('操作系统版本:', os.release());
console.log('主机名:', os.hostname());
console.log('用户主目录:', os.homedir());
console.log('临时目录:', os.tmpdir());

// 3. 进程ID信息
console.log('\n--- 进程信息 ---');
console.log('当前进程ID:', process.pid);
console.log('父进程ID:', process.ppid);
console.log('进程标题:', process.title);
console.log('Node.js 版本:', process.version);
console.log('V8 引擎版本:', process.versions.v8);

// 4. NodeJS可执行文件路径
console.log('\n--- Node.js 路径信息 ---');
console.log('Node.js 可执行文件路径:', process.execPath);
console.log('当前工作目录:', process.cwd());
console.log('脚本文件路径:', __filename);
console.log('脚本目录路径:', __dirname);

// 5. 内存使用情况
console.log('\n--- 内存使用情况 ---');
const totalMem = os.totalmem();
const freeMem = os.freemem();
const usedMem = totalMem - freeMem;

console.log('系统总内存:', (totalMem / 1024 / 1024 / 1024).toFixed(2), 'GB');
console.log('系统可用内存:', (freeMem / 1024 / 1024 / 1024).toFixed(2), 'GB');
console.log('系统已用内存:', (usedMem / 1024 / 1024 / 1024).toFixed(2), 'GB');
console.log('内存使用率:', ((usedMem / totalMem) * 100).toFixed(2), '%');

// 进程内存使用情况
const memUsage = process.memoryUsage();
console.log('\n--- 当前进程内存使用情况 ---');
console.log('RSS (常驻内存):', (memUsage.rss / 1024 / 1024).toFixed(2), 'MB');
console.log('堆总大小:', (memUsage.heapTotal / 1024 / 1024).toFixed(2), 'MB');
console.log('堆已使用:', (memUsage.heapUsed / 1024 / 1024).toFixed(2), 'MB');
console.log('外部内存:', (memUsage.external / 1024 / 1024).toFixed(2), 'MB');
console.log('数组缓冲区:', (memUsage.arrayBuffers / 1024 / 1024).toFixed(2), 'MB');

// 6. 其他系统信息
console.log('\n--- 其他系统信息 ---');
console.log('系统运行时间:', Math.floor(os.uptime() / 3600), '小时');
console.log('网络接口:', Object.keys(os.networkInterfaces()));
console.log('用户信息:', os.userInfo());

// 7. 环境变量信息
console.log('\n--- 环境变量信息 ---');
console.log('PATH:', process.env.PATH);
console.log('NODE_ENV:', process.env.NODE_ENV || '未设置');
console.log('操作系统:', process.env.OS || '未设置');
